/******************************************************************************
 * Copyright (C) 2015  671643387@qq.com
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 *****************************************************************************/

#include "Game/Game/ObjectManager.h"
#include "Game/Game/SQLStorages.h"


ObjectManager *ObjectManager::_instance = NULL;

ObjectManager *ObjectManager::instance(void)
{
    SHARED_ASSERT(_instance);
    return _instance;
}

ObjectManager::ObjectManager(void)
    : _playerXPperLevel()
{
    SHARED_ASSERT(!_instance);
    _instance = this;
}

ObjectManager::~ObjectManager(void)
{

}

const PlayerInfo *ObjectManager::getPlayerInfo(std::uint32_t race, std::uint32_t class_)
{
    if (race   >= MAX_RACES)   { return NULL; }
    if (class_ >= MAX_CLASSES) { return NULL; }
    PlayerInfo const* info = &_playerInfo[race][class_];
    if (info->displayId_M == 0 || info->displayId_F == 0) { return NULL; }
    return info;
}

const ItemPrototype *ObjectManager::getItemPrototype(::std::uint32_t id)
{
    return gameSQLStorages.itemStorage().lookupEntry<ItemPrototype>(id);
}

const InstanceTemplate *ObjectManager::getInstanceTemplate(std::uint32_t mapId)
{
    return gameSQLStorages.instanceTemplate().lookupEntry<InstanceTemplate>(mapId);
}